﻿using System.Threading.Tasks;

namespace awaitTest2
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("主线程开始！主线程ID："+Thread.CurrentThread.ManagedThreadId);
            F1();   // 这里没有await，F1()会在一个独立的线程中运行，主线程不会等待它完成
                    //遇到await时，F1()会将控制权返回给调用它的线程（即主线程）
             //await F1(); // 这里有await，主线程会等待F1()完成后再继续执行
            Console.WriteLine("主线程结束！");

            //Console.ReadLine();   // 防止主线程结束，观察子线程输出
        }

        public static async Task F1()
        {
            Task task = Task.Run(() =>
            {
                Console.WriteLine("子线程开始：" + Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(3000);
                Console.WriteLine("子线程结束");
            });

            await task;

            Console.WriteLine("后续线程：" + Thread.CurrentThread.ManagedThreadId);
        }
    }
}
